/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

#include <stdio.h>
#include <stdlib.h>

int a[1000];
int n = 0;
void swap(int *a, int *b) {
    int t = *a;
    *a = *b;
    *b = t;
}
//最小堆
void shiftdown(int i) {
    int flag = 0;
    int t = i;
    while (i * 2 <= n && flag == 0) {
        if (a[i] > a[i * 2]) {
            t = i * 2;
        } else {
            t = i;
        }
        if (i * 2 + 1 <= n) {
            if (a[t] > a[i * 2 + 1]) {
                t = i * 2 + 1;
            }
        }
        if (i != t) {
            swap(&a[i], &a[t]);
            i = t;
        } else {
            flag = 1;
        }
    }
}
void shiftup(int i) {
    int flag = 0;
    if (i == 1) {
        return;
    }
    while (i > 1 && flag == 0) {
        if (a[i / 2] > a[i]) {
            swap(&a[i / 2], &a[i]);
        } else {
            flag = 1;
        }
        i = i / 2;
    }
}

void push(int val) {
    n++;
    a[n] = val;
    shiftup(n);
}

int pop() {
    int t = a[1];
    a[1] = a[n];
    n--;
    shiftdown(1);
    return t;
}

int main()
{
    for (int i = 0; i < 5; i++) {
        int x;
        scanf("%d", &x);
        push(x);
    }
    
    while (n >= 1) {
        int y = pop();
        printf("%d ", y);
    }

    return 0;
}

